package com.mindspore.federatedime.util;

import android.content.Context;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;

public class LabelUtils {
    private static final String[] LABELARRAY = new String[]{
            "/:D", "/:)", "/:*", "/:8", "/D~", "/CY", "/:$", "/;I", "/$D",
            "/;)", "/;P", "/;>", "/KI", "/LO", "/ZC", "/:S", "/-O", "/:Z",
            "/-(", "/:0", "/:!", "/OT", "/:X", "/DR", "/:<", "/NM", "/ZK",
            "/TY", "/FN", "/0(", "/SX", "/:(", "/LH", "/FD", "/:?", "/SK",
            "/%S", "/YD", "/:\\", "/88", "/JC", "/ZG", "/ZD", "/:{", "/BO",
            "/GI", "/ZB", "/BH", "/MA", "/GO", "/@@", "/%@", "/DX", "/KF",
            "/XS", "/YH", "/HL", "/**", "/SU", "/MO", "/XY", "/YS", "/FF",
            "/KL", "/LW", "/XG", "/GB", "/CF", "/PG", "/SZ", "/DH", "/DS",
            "/DY", "/MI", "/YY", "/TQ", "/DP", "/KB", "/SA", "/GZ", "/NL",
            "/OK", "/SL", "/WS", "/JB", "/JJ", "/LP", "/XL", "/BS", "/PT",
            "/TS", "/LI", "/KJ", "/SW", "/WY", "/HH", "/WL", "/JX", "/JZ",
            "/ZM", "/YE", "/GH", "/HS", "/QZ", "/QU", "/LU", "/BQ"};

    public static String generateLabelString(String content, int index) {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(LABELARRAY[index]);
        stringBuilder.append("\t");
        stringBuilder.append(content);
        return stringBuilder.toString();
    }

    public static ByteBuffer loadModelFile(Context context, String modelPath) {
        try {
            InputStream is = context.getAssets().open(modelPath);
            byte[] bytes = new byte[is.available()];
            is.read(bytes);
            return ByteBuffer.allocateDirect(bytes.length).put(bytes);
        } catch (Exception e) {
            Log.d("loadModelFile", " Exception occur. ");
        }
        return null;
    }

    //    vocab.json
    public static String[] getJson2Array(Context context) {
        StringBuilder stringBuilder = new StringBuilder();
        try {
            BufferedReader bf = new BufferedReader(
                    new InputStreamReader(context.getAssets().open("vocab.json")));
            String line;
            while ((line = bf.readLine()) != null) {
                stringBuilder.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        JSONArray jsonArray;
        List<String> listData = null;
        try {
            JSONObject jsonObject = new JSONObject(stringBuilder.toString());
            jsonArray = jsonObject.getJSONArray("vocab");
            listData = new ArrayList<>();
            for (int i = 0; i < jsonArray.length(); i++) {
                listData.add((String) jsonArray.get(i));
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        String[] array = new String[listData.size()];
        listData.toArray(array);
        return array;
    }
}
